package com.bjpowernode.util;

import org.springframework.util.ObjectUtils;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * 缓存通用工具
 */
public class CacheUtils {

    /**
     * 带有缓存的查询工具方法
     * @param cacheSelector
     * @param databaseSelector
     * @param cacheSave
     * @return
     * @param <T>
     */
    public static <T> T getCacheData(Supplier<T> cacheSelector, Supplier<T> databaseSelector, Consumer<T> cacheSave) {
        // 从redis查询
        T data = cacheSelector.get();
        // redis为空
        if (ObjectUtils.isEmpty(data)) {
            // 从数据库查
            data = databaseSelector.get();
            if (!ObjectUtils.isEmpty(data)) {
                // 把数据放入redis
                cacheSave.accept(data);
            }
        }
        // 返回数据
        return data;
    }
}
